﻿using System.Diagnostics;
using System.Xml.Serialization;

namespace GitExtensions.Extensibility.Translations.Xliff;

[DebuggerDisplay("{Name}.{Property}={Value}")]
public class TranslationItem : IComparable<TranslationItem>, ICloneable
{
    public TranslationItem()
    {
    }

    public TranslationItem(string name, string property, string? source)
    {
        Name = name;
        Property = property;
        Source = source;
    }

    public TranslationItem(string? name, string? property, string? source, string? value)
    {
        Name = name;
        Property = property;
        Source = source;
        Value = value;
    }

    [XmlIgnore]
    public string? Name { get; set; }

    [XmlIgnore]
    public string? Property { get; set; }

    [XmlAttribute("id")]
    public string Id
    {
        get => Name + "." + Property;
        set
        {
            string[] values = value.Split(Delimiters.Period, 2);
            Name = values[0];
            Property = values.Length > 1 ? values[1] : "";
        }
    }

    [XmlElement("source")]
    public string? Source { get; set; }

    [XmlElement("target")]
    public string? Value { get; set; }

    public int CompareTo(TranslationItem? other)
    {
        int val = string.Compare(Name, other?.Name, StringComparison.Ordinal);
        if (val == 0)
        {
            val = string.Compare(Property, other?.Property, StringComparison.Ordinal);
        }

        return val;
    }

    object ICloneable.Clone()
    {
        return Clone();
    }

    public TranslationItem Clone()
    {
        return new TranslationItem(Name, Property, Source, Value);
    }
}
